#include "ref.h"

void ref_cmplx_mult_real_f32(float32_t *pSrcCmplx, float32_t *pSrcReal,
                             float32_t *pCmplxDst, uint32_t numSamples)
{
    uint32_t i;

    for (i = 0; i < numSamples; i++) {
        pCmplxDst[2 * i + 0] = pSrcCmplx[2 * i + 0] * pSrcReal[i];
        pCmplxDst[2 * i + 1] = pSrcCmplx[2 * i + 1] * pSrcReal[i];
    }
}

void ref_cmplx_mult_real_q31(q31_t *pSrcCmplx, q31_t *pSrcReal,
                             q31_t *pCmplxDst, uint32_t numSamples)
{
    uint32_t i;
    q31_t tempR, tempI;

    for (i = 0; i < numSamples; i++) {
        tempR = ((q63_t)pSrcCmplx[2 * i + 0] * pSrcReal[i]) >> 32;
        tempI = ((q63_t)pSrcCmplx[2 * i + 1] * pSrcReal[i]) >> 32;
        pCmplxDst[2 * i + 0] = ref_sat_n(tempR, 31) << 1;
        pCmplxDst[2 * i + 1] = ref_sat_n(tempI, 31) << 1;
    }
}

void ref_cmplx_mult_real_q15(q15_t *pSrcCmplx, q15_t *pSrcReal,
                             q15_t *pCmplxDst, uint32_t numSamples)
{
    uint32_t i;
    q31_t tempR, tempI;

    for (i = 0; i < numSamples; i++) {
        tempR = ((q31_t)pSrcCmplx[2 * i + 0] * pSrcReal[i]) >> 15;
        tempI = ((q31_t)pSrcCmplx[2 * i + 1] * pSrcReal[i]) >> 15;
        pCmplxDst[2 * i + 0] = ref_sat_q15(tempR);
        pCmplxDst[2 * i + 1] = ref_sat_q15(tempI);
    }
}
